package com.atlin.generator.file;

import cn.hutool.core.io.FileUtil;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;

import java.io.*;
import java.nio.charset.StandardCharsets;

/**
 * @author atlin
 * @description 动态文件生成
 * @createDate 2024/9/18 18:29
 */
public class DynamicFileGenerator {
    
    /**
     * 生成文件
     *
     * @param inputPath  模版文件输入路径
     * @param outputPath 输出路径
     * @param model      数据模型
     */
    public static void doGenerate(String inputPath, String outputPath, Object model) throws IOException, TemplateException {

        Configuration configuration = new Configuration(Configuration.VERSION_2_3_32);

        // 指定模版文件所在的路径
        File templateDir = new File(inputPath).getParentFile();
        configuration.setDirectoryForTemplateLoading(templateDir);

        // 设置模版使用的字符集
        configuration.setDefaultEncoding("UTF-8");

        // 创建模版对象，加载指定模版
        String templateName = new File(inputPath).getName();

        Template template = configuration.getTemplate(templateName);

        // 文件不存在则创建文件和父目录
        if (!FileUtil.exist(outputPath)) {
            FileUtil.touch(outputPath);
        }
        // fix 本地代码生成器在生成文件之后乱码问题
        FileOutputStream fileOutputStream = new FileOutputStream(outputPath);
        Writer out = new OutputStreamWriter(fileOutputStream, StandardCharsets.UTF_8);
//        FileWriter out = new FileWriter(outputPath);
        template.process(model, out);

        out.close();
    }

}
